package com.hpdf.utils;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;

import com.github.pagehelper.Page;
import com.hpdf.utils.web.resultbean.PageBean;
/**
 * mybatis 
 * @author wangfs
 *
 */
public class PageBeanUtil {

	/**
	 * 查询结果封装.<br/>
	 * 
	 * @param datas
	 * @return
	 */
	
	public  static<T> PageBean<T> setPageResult(List<T> datas) {
		PageBean<T> result = new PageBean<T>();
		if (datas instanceof Page) {
			Page<T> page = (Page<T>) datas;
			result.setPageNum(page.getPageNum());
			result.setPageSize(page.getPageSize());
			result.setDataList(page.getResult());
			result.setPageTotals(page.getTotal() > 0 ? Integer.valueOf(page.getTotal() + "") : 0);
			result.setPages(page.getPages());
			result.setPageSizeZero(page.getPageSizeZero());
		} else {
			Page<T> page = (Page<T>) datas;
			result.setPageNum(1);
			result.setPageSize(datas.size());
			result.setDataList(datas);
			result.setPageTotals(datas.size());
			result.setPages(page.getPages());
			result.setPageSizeZero(page.getPageSizeZero());
		}

		return result;
	}
	/**
	 * 将查询出来的带有Page属性的List转换为VO的PageBean
	 * @param entitys
	 * @param voClas
	 * @return
	 * @author zhaowg3
	 * @Date 2016年8月15日
	 */
	public static<T, E> PageBean<T> copyEntity2Vo(List<E> entitys,Class<T> voClas){
		/**复制page属性*/
		PageBean<E> result = new PageBean<E>();
		result = PageBeanUtil.setPageResult(entitys);
		return PageBeanUtil.copyEntity2Vo(result, voClas);
	}
	/**
	 * 将查询出来的Entity的PageBean转换为VO的PageBean
	 * @param pageBeanEntitys  例如PageBean<RmResRecover>
	 * @param voClas           例如RmResRecoverVO.class
	 * @return
	 * @author zhaowg3
	 * @Date 2016年8月15日
	 */
	public static<T, E> PageBean<T> copyEntity2Vo(PageBean<E> pageBeanEntitys,Class<T> voClas){
		/**复制page属性*/
		PageBean<T> result = new PageBean<T>();
		result.setPageNum(pageBeanEntitys.getPageNum());
		result.setPageSize(pageBeanEntitys.getPageSize());
		result.setPageTotals(pageBeanEntitys.getPageTotals());
		result.setPages(pageBeanEntitys.getPages());
		result.setPageSizeZero(pageBeanEntitys.getPageSizeZero());
		/**复制分页数据*/
		List<T> vos = new ArrayList<T>();
		List<E> entitys = pageBeanEntitys.getDataList();
		try{
			if(CollectionUtils.isNotEmpty(entitys)){
				for (E entity : entitys) {
					T vo = null;
						vo = voClas.newInstance();
					BeanUtils.copyProperties(entity, vo);
					vos.add(vo);
				}
			}
		}catch(Exception e){
			/**转换为运行时异常*/
			throw new RuntimeException(e);
		}
		result.setDataList(vos);
		return result;
	}

}
